/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package muhnes.sizoo.controlador;


import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import muhnes.sizoo.dal.AnimalDao;
import muhnes.sizoo.dal.AnimalDaoImpl;
import muhnes.sizoo.modelo.Animal;
import muhnes.sizoo.dal.EspecieDao;
import muhnes.sizoo.dal.EspecieDaoImpl;
import muhnes.sizoo.modelo.Especie;
import muhnes.sizoo.dal.SinonimiaDao;
import muhnes.sizoo.dal.SinonimiaDaoImpl;
import muhnes.sizoo.modelo.Sinonimia;
/**
 *
 * @author CALDERON
 */
@ManagedBean(name = "animalBean")
@ViewScoped
public class AnimalBean implements Serializable{
   
    private Animal animal;
    private Sinonimia sinonimia;
    private List< Animal > listaAnimals;
    private List< Sinonimia > listaSinonimias;
    private List< SelectItem > itemsEspecie;

    /** Creates a new instance of AnimalBean */
    public AnimalBean() {
        AnimalDao dao= new AnimalDaoImpl();
        animal= new Animal();
        SinonimiaDao daoSinonimia = new SinonimiaDaoImpl();
        sinonimia = new Sinonimia();
        listaAnimals = dao.buscarTodos();
        listaSinonimias = daoSinonimia.buscarTodos();
    }

    public Animal getAnimal() {
        return animal;
    }

    public void setAnimal(Animal animal) {
        this.animal = animal;
    }

    public Sinonimia getSinonimia() {
        return sinonimia;
    }

    public void setSinonimia(Sinonimia sinonimia) {
        this.sinonimia = sinonimia;
    }

    public List< Animal > getListaAnimals() {
        if( listaAnimals == null ) {
            AnimalDao dao = new AnimalDaoImpl();
            listaAnimals = dao.buscarTodos();
        }
        return listaAnimals;
    }
    
    public void prepararAdicion( ActionEvent event  ){
        animal = new Animal();
    }
    
    public void prepararModificacion( Animal animal ){
        this.animal = animal;
    }
    public void prepararEliminacion(Animal animal ){
        this.animal = animal;
    }

    
    public void agregarAnimal( ActionEvent event ){
        AnimalDaoImpl dao = new AnimalDaoImpl();
        animal.setEstado("Habilitado");
        dao.guardar( animal );
        recrearModelo();
    }
    public void actualizarAnimal( ActionEvent event ){
        AnimalDaoImpl dao = new AnimalDaoImpl();
        dao.actualizar( animal );
        recrearModelo();
    }
    
    public void eliminarAnimal(  ActionEvent event ){
        AnimalDaoImpl dao = new AnimalDaoImpl();
        animal.setEstado("Deshabilitado");
        dao.eliminar( animal );
        recrearModelo();
    }
        
    public List< SelectItem > getItemsEspecie() {
        if( itemsEspecie == null ) {
            itemsEspecie = new ArrayList< SelectItem >();
            EspecieDao dao = new EspecieDaoImpl();
            for( Especie especie : dao.buscarTodos() ) {
                SelectItem item = new SelectItem( especie, especie.getNombre());
                
                itemsEspecie.add( item );
            }
        }
        return itemsEspecie;
    }
    
    public List< Sinonimia > getListaSinonimias() {
        if( listaSinonimias == null ) {
            SinonimiaDao daoSinonimia = new SinonimiaDaoImpl();
            listaSinonimias = daoSinonimia.buscarTodos();
        }
        return listaSinonimias;
    }
    
    public List< Sinonimia > getSinonimias(  Animal anim ) {
        List< Sinonimia > sinonimias = new ArrayList< Sinonimia >();
        for( Sinonimia sinonimi : anim.getSinonimias() ) {
           sinonimias.add(sinonimi); 
        }
        return sinonimias;
    }
    
    void recrearModelo() {
        listaAnimals = null;
        listaSinonimias = null;
    }   
}

